// import parseTime, formatTime and set to filter
export { parseTime, formatTime } from '@/utils'

/**
 * Show plural label if time is plural number
 * @param {number} time
 * @param {string} label
 * @return {string}
 */
function pluralize(time, label) {
  if (time === 1) {
    return time + label
  }
  return time + label + 's'
}

/**
 * @param {number} time
 */
export function timeAgo(time) {
  const between = Date.now() / 1000 - Number(time)
  if (between < 3600) {
    return pluralize(~~(between / 60), ' minute')
  } else if (between < 86400) {
    return pluralize(~~(between / 3600), ' hour')
  } else {
    return pluralize(~~(between / 86400), ' day')
  }
}

/**
 * Number formatting
 * like 10000 => 10k
 * @param {number} num
 * @param {number} digits
 */
export function numberFormatter(num, digits) {
  const si = [
    { value: 1E18, symbol: 'E' },
    { value: 1E15, symbol: 'P' },
    { value: 1E12, symbol: 'T' },
    { value: 1E9, symbol: 'G' },
    { value: 1E6, symbol: 'M' },
    { value: 1E3, symbol: 'k' }
  ]
  for (let i = 0; i < si.length; i++) {
    if (num >= si[i].value) {
      return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
    }
  }
  return num.toString()
}

/**
 * 10000 => "10,000"
 * @param {number} num
 */
export function toThousandFilter(num) {
  return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}

/**
 * Upper case first char
 * @param {String} string
 */
export function uppercaseFirst(string) {
  return string.charAt(0).toUpperCase() + string.slice(1)
}

export function priceFormat(val) {
  var v = parseFloat(val) //强转Int，毕竟有可能返回是String类型的数字
  return v.toFixed(2)
}

export function payStatusFormat(val) {
  if (val == 0) {
    return '未支付'
  } else if (val == 1) {
    return '支付成功'
  } else if (val == 2) {
    return '申请退款'
  } else if (val == 3) {
    return '已退款'
  }
  return ''
}

/**
 * 计算方式 类型 ，0： %（百分比），1：‰（千分比），2：固定值，3区间：[100-200]
 * @param val
 * @returns {string}
 */
export function calculateTypeFormat(val) {
  if (val == 0) {
    return '%'
  } else if (val == 1) {
    return '‰'
  } else if (val == 2) {
    return '固定值'
  } else if (val == 3) {
    return '区间'
  }
  return ''
}

// 咨询状态
export function statusFormat(val) {
  if (val == -1) {
    return '拒绝'
  } else if (val == 0) {
    return '取消'
  } else if (val == 1) {
    return '待回复'
  } else if (val == 2) {
    return '已回复'
  }
  return ''
}

export function genderFormat(val) {
  if (val == 0) {
    return '未知'
  } else if (val == 1) {
    return '男'
  } else if (val == 2) {
    return '女'
  }
  return ''
}

// 互联网看诊方式
export function visitTypeFormat(val) {
  if (val == 1) {
    return '图文'
  } else if (val == 2) {
    return '语音'
  } else if (val == 3) {
    return '视频'
  } else {
    return '其他'
  }
  return ''
}

/**
 * 处方审核状态
 * @param val
 * @returns {string}
 */
export function prescriptionStatusFormat(val) {
  if (val == 0) {
    return '未审核'
  } else if (val == 1) {
    return '已通过'
  } else if (val == 2) {
    return '未通过'
  }
  return ''
}

/**
 * 监管上传状态
 * @param val
 * @returns {string}
 */
export function uploadFormat(val) {
  if (val == 0) {
    return '未上传'
  } else if (val == 1) {
    return '已上传'
  }
  return ''
}

/**
 * 0-非医保处方；1-双通道；2-门诊统筹；9-国家医保
 * @param val
 * @returns {string}
 */
export function presChsTypeFormat(val) {
  if (val == 0) {
    return '普通处方(自费)'
  } /*else if (val == 1) {
    return '双通道'
  }*/ else if (val == 2) {
    return '医保普通门诊（流转处方）'
  } else if (val == 3) {
    return '医保门诊慢病（流转处方）'
  } else if (val == 9) {
    return '国家医保处方（个账）'
  }
  return ''
}

/**
 *
 * @param val
 * @returns {string}
 */
export function insutypeTypeFormat(val) {
  if (val == 310) {
    return '职工基本医疗保险'
  } else if (val == 390) {
    return '城乡居民基本医疗保险'
  } else if (val == 391) {
    return '城镇居民基本医疗保险'
  } else if (val == 9) {
    return '国家医保'
  }
  return ''
}

/**
 * 处方流转状态
 * @param val 0-预核验；1-已签名；2-已上传；-1-已撤销
 * @returns {string}
 */
export function chsPresUploadFormat(val) {
  if (val == 0) {
    return '预核验'
  } else if (val == 1) {
    return '已签名'
  } else if (val == 2) {
    return '已上传'
  } else if (val == -1) {
    return '已撤销'
  }
  return ''
}

export function calculateAge(birthDateString) {
  var today = new Date()
  var birthDate = new Date(birthDateString)
  var age = today.getFullYear() - birthDate.getFullYear()
  var m = today.getMonth() - birthDate.getMonth()
  if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
    age--
  }
  return age
}

/**
 * 数字转中文金额
 * @param num
 * @returns {string}
 */
export function numberToChinese(n) {
  if (!n){
    return '' ;
  }
  // 定义小数部分的单位（角、分）
  var fraction = ['角', '分']
  // 定义数字0-9对应的中文大写
  var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
  // 定义整数部分的单位：
  // 第一层为量级单位（元、万、亿），第二层为位单位（拾、佰、仟）
  var unit = [
    ['元', '万', '亿'],
    ['', '拾', '佰', '仟']
  ]
  // 处理负数情况，若为负数则前缀为"负"，否则为空
  var flag = n < 0 ? '负' : ''
  // 将数字转为绝对值，后续统一处理正数
  n = Math.abs(n)
  // 用于存储转换后的字符串结果
  var result_string = ''
  // 处理小数部分（角和分）
  for (var i = 0; i < fraction.length; i++) {
    // 计算当前小数位的数字（角：n*10取整后模10，分：n*100取整后模10）
    // 拼接数字大写与对应单位（如"伍角"），并移除"零角"或"零分"的冗余表达
    result_string += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '')
  }
  // 若小数部分为空（无角分），则用"整"表示
  result_string = result_string || '整'
  // 截取整数部分（去除小数部分）
  n = Math.floor(n)
  // 处理整数部分，按"元、万、亿"量级循环
  for (var i = 0; i < unit[0].length && n > 0; i++) {
    // 存储当前量级（如万级）的转换结果
    var p = ''
    // 处理当前量级下的"拾、佰、仟"位
    for (var j = 0; j < unit[1].length && n > 0; j++) {
      // 从个位开始处理，拼接数字大写与位单位（如"壹佰"）
      p = digit[n % 10] + unit[1][j] + p
      // 移除已处理的个位数字
      n = Math.floor(n / 10)
    }
    // 清理当前量级的冗余零（移除末尾连续的零，空值用"零"填充）
    // 拼接当前量级单位（如"万"）和之前的结果
    result_string = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + result_string
  }
  // 返回最终结果，去除多余的“零”和“整”字
  return flag + result_string.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整')
}
